package com.ysyx.ysyx_shareorder.controller;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.ysyx.ysyx_shareorder.dto.BaseDto;
import com.ysyx.ysyx_shareorder.pojo.OrderPojo;
import com.ysyx.ysyx_shareorder.qo.GeoQo;
import com.ysyx.ysyx_shareorder.service.OrderPojoService;
import com.ysyx.ysyx_shareorder.service.impl.OrderPojoServiceImpl;
import com.ysyx.ysyx_shareorder.util.MapToBeanUtils;
import org.redisson.api.GeoUnit;
import org.redisson.api.RGeo;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Point;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @description: xxxx接口/类
 * @author:薛宇晖
 * @create:2023/4/11 14:25
 */
@RestController
@RequestMapping("/order")
public class ShareOrderController {

    @Autowired
    private RedissonClient redissonClient;


    @Autowired
    private OrderPojoService orderPojoService;


    /*
     * @Description: (作用)司机查看可以抢的订单
     * @params: 司机id,地理位置信息经纬度
     * @return: baseDto         list: orders
     * @Author: 薛宇晖
     * @create:2023/4/11
     */
    @RequestMapping("/queryRob/byDriver")
    public BaseDto queryIsRob(@RequestBody GeoQo qo) throws Exception {
        System.out.println("cs");
        return orderPojoService.queryIsRob(qo);

//        String areaName = "";
//
//        List<RMap<Object,Object>> maps = new ArrayList<>();
//
//
//        RMap<Object, Object> mapA1 = redissonClient.getMap("area:A1");
//        RMap<Object, Object> mapA2 = redissonClient.getMap("area:A2");
//        RMap<Object, Object> mapA3 = redissonClient.getMap("area:A3");
//        RMap<Object, Object> mapB1 = redissonClient.getMap("area:B1");
//        RMap<Object, Object> mapB2 = redissonClient.getMap("area:B2");
//        RMap<Object, Object> mapB3 = redissonClient.getMap("area:B3");
//        maps.add(mapA1);
//        maps.add(mapA2);
//        maps.add(mapA3);
//        maps.add(mapB1);
//        maps.add(mapB2);
//        maps.add(mapB3);
//
//        //判断司机的位置
//        for (RMap<Object, Object> map : maps) {
//
//            Double leftupLongitude = Double.parseDouble((String) map.get("leftupLongitude")) ;
//            Double leftupLatitude = Double.parseDouble((String) map.get("leftupLatitude")) ;
//            Double rightdownLongitude = Double.parseDouble((String) map.get("rightdownLongitude")) ;
//            Double rightdownLatitude = Double.parseDouble((String) map.get("rightdownLatitude")) ;
//            if (qo.getLongitude()>=leftupLongitude &&   //司机位置经度 >= 区域左上经度
//                    qo.getLongitude()<=rightdownLongitude &&  //司机位置经度 <= 区域右下经度
//                    qo.getLatitude()>=rightdownLatitude &&// 司机位置纬度 >= 区域右下纬度
//                    qo.getLatitude()<=leftupLatitude// 司机位置纬度 >= 区域左上纬度
//            )
//            {
//                areaName =  map.getName();
//                break;
//            }else {
//                continue;
//            }
//
//
//        }
//        //已经过去地区名称
//
//        RGeo<String> geo = redissonClient.getGeo(areaName+":orders");
//
//        List<String> radius = geo.radius(qo.getLatitude(), qo.getLongitude(), 5000, GeoUnit.METERS);
//
//        List<OrderPojo> pojos = new ArrayList<>();
//        //返回一个可接单的订单list
//        for (String s : radius) {
//            RMap<Object, Object> orderMap = redissonClient.getMap("redisinfo:" + s);
//            OrderPojo orderPojo = (OrderPojo) MapToBeanUtils.mapToBean(orderMap, OrderPojo.class);
//            pojos.add(orderPojo);
//        }
//
//        //判断订单长度
//        BaseDto baseDto;
//
//        if (pojos.size()==0){
//            baseDto = new BaseDto(101,"附近没有订单",null);
//            return baseDto;
//        }
//
//        baseDto = new BaseDto(201,"这是附近的订单",pojos);
//        return  baseDto;

    }


    /*
     * @Description: (作用)前端设定默认时间   发起一个获取订单的请求  系统派给他一个订单
     * @params: qo  订单编号    经纬度
     * @return:
     * @Author: 薛宇晖
     * @create:2023/4/14
     */

    @RequestMapping("/driver/assign")
    public BaseDto rapeOrderToDriver(@RequestBody GeoQo qo){

        return orderPojoService.rapeOrder(qo);
    }


}
